﻿/**
 * @file NisBaseLaneCommon_Struct.h
 * @brief NisBaseLaneCommon
 * @details 
 * @mainpage http://www.navinfo.com/
 * @author Navinfo
 * @email 400-810-0880
 * @license Navinfo Co.,Ltd. All rights reserved
 */
#ifndef	__NISBASELANECOMMONSTRUCT_H_
#define	__NISBASELANECOMMONSTRUCT_H_

PRAGMA_PACK_PUSH

namespace Navinfo {
namespace Nis {

class CLane;
class CLaneGroupNumberInLinkGeo;



/**
 * @brief 车道情报
 * 
 */
class DLL_PUBLIC CLane
{
public:
	CLane();

	explicit CLane(
		  const vector< Navinfo::Nis::CLaneId > &m_vclSrcLane_
		, const vector< Navinfo::Nis::CLaneId > &m_vclDestLane_ = vector< Navinfo::Nis::CLaneId >()
		);

public:
	/**
	 * @brief 取得SrcLane的数量
	 *
	 * @return SrcLane的数量
	 */
	size_t GetNumSrcLane() const;

	/**
	 * @brief 取得数组SrcLane中下标为iNo的元素
	 * @details 
	 *
	 * @return 前向车道Id的排列（当前Lane的前向接续LaneId）
	 */
	const Navinfo::Nis::CLaneId& GetSrcLane( size_t iNo ) const;

	/**
	 * @brief 取得SrcLane
	 *
	 * @return 前向车道Id的排列（当前Lane的前向接续LaneId）
	 */
	const vector< Navinfo::Nis::CLaneId >& GetSrcLane() const;

	/**
	 * @brief 取得DestLane的数量
	 *
	 * @return DestLane的数量
	 */
	size_t GetNumDestLane() const;

	/**
	 * @brief 取得数组DestLane中下标为iNo的元素
	 * @details 
	 *
	 * @return 后向车道Id的排列（当前Lane的后向接续LaneId）
	 */
	const Navinfo::Nis::CLaneId& GetDestLane( size_t iNo ) const;

	/**
	 * @brief 取得DestLane
	 *
	 * @return 后向车道Id的排列（当前Lane的后向接续LaneId）
	 */
	const vector< Navinfo::Nis::CLaneId >& GetDestLane() const;


public:
	vector< Navinfo::Nis::CLaneId >								m_vclSrcLane;								///<	  前向车道Id的排列（当前Lane的前向接续LaneId）  
	vector< Navinfo::Nis::CLaneId >								m_vclDestLane;								///<	  后向车道Id的排列（当前Lane的后向接续LaneId）  
};


/**
 * @brief LaneGroup在LinkGeo上的序号情报
 * 
 */
class DLL_PUBLIC CLaneGroupNumberInLinkGeo
{
public:
	CLaneGroupNumberInLinkGeo();

	explicit CLaneGroupNumberInLinkGeo(
		  const Navinfo::Nis::CDirLinkGeoId &m_clLinkGeoId_
		, const uchar &m_ucLaneGroupNo_ = 0
		);

public:
	/**
	 * @brief 取得LinkGeoId
	 *
	 * @return LaneGroup关联的LinkGeoId
	 */
	const Navinfo::Nis::CDirLinkGeoId& GetLinkGeoId() const;

	/**
	 * @brief 取得LaneGroupNo
	 *
	 * @return 当前LaneGroup在LinkGeo上的序号，从0开始编号
	 */
	const uchar& GetLaneGroupNo() const;


public:
	Navinfo::Nis::CDirLinkGeoId									m_clLinkGeoId;								///<	  LaneGroup关联的LinkGeoId  
	uchar														m_ucLaneGroupNo;							///<	  当前LaneGroup在LinkGeo上的序号，从0开始编号  
};

}
}

PRAGMA_PACK_POP

#endif	//	__NISBASELANECOMMONSTRUCT_H_
